

// 全部成功才成功，一旦一个失败则失败
function all(arr) {
  return new Promise((resolve, reject) => {
    let result = []
    const fn = (index, data) => {
      if (index === result.length) {
        resolve(result)
      } else {
        result.push(data)
      }
    }
    for (let i = 0; arr.length; i++) {
      const p = arr[i]

      if (p && typeof p.then === 'function') { // 区别是否是promise函数，还是常量
        p.then((data) => {
          fn(i, data)
        },
          (err) => {
            reject(err)
          }
        )
      } else {
        fn(i, p)
      }
    }
  })
}